package cashpointer.mobile;

import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import cashpointer.mobile.service.UpdateService;
import cashpointer.mobile.support.NotificationSupportManager;

public class MainActivity extends Activity {
	
	/**
	 * Opcje menu.
	 */
	static private final int MENU_FIND = Menu.FIRST;
	static private final int MENU_LIST = Menu.FIRST + 1;
	static private final int MENU_CONFIG = Menu.FIRST + 2;
	static private final int MENU_ABOUT = Menu.FIRST + 3;
	static private final int MENU_UPDATE = Menu.FIRST + 4;
	static private final int MENU_QUIT = Menu.FIRST + 5;
	
	/**
	 * Opcje dialog.
	 */
	static private final int DIALOG_ABOUT = 0;
	
	/** 
     * Called when the activity is first created. 
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
        // Zaczytanie layoutu.    
        setContentView(R.layout.main);
        
        // Pobieram przycisk "Wyszukaj".
        ImageButton findButton = (ImageButton)findViewById(R.id.mainFindButton);
        findButton.setOnClickListener(new OnClickListener() {
	        public void onClick(View v) {
	        	MainActivity.this.find();
	        }
        });

        // Pobieram przycisk "Lista bankomatow".
        ImageButton listButton = (ImageButton)findViewById(R.id.mainListButton);
        listButton.setOnClickListener(new OnClickListener() {
	        public void onClick(View v) {
	        	MainActivity.this.list();
	        }
        });

        // Pobieram przycisk "Konfiguracja".
        ImageButton configButton = (ImageButton)findViewById(R.id.mainConfigButton);
        configButton.setOnClickListener(new OnClickListener() {
	        public void onClick(View v) {
	        	MainActivity.this.config();
	        }
        });

        // Pobieram przycisk "Aktualicacja".
        ImageButton updateButton = (ImageButton)findViewById(R.id.mainUpdateButton);
        updateButton.setOnClickListener(new OnClickListener() {
	        public void onClick(View v) {
	        	MainActivity.this.update();
	        }
        });
        
        // Pobieram przycisk "O programie".
        ImageButton infoButton = (ImageButton)findViewById(R.id.mainInfoButton);
        infoButton.setOnClickListener(new OnClickListener() {
	        public void onClick(View v) {
        		showDialog(DIALOG_ABOUT);
	        }
        });
        
        // Pobieram przycisk "Wyjdz".
        ImageButton closeButton = (ImageButton)findViewById(R.id.mainCloseButton);
        closeButton.setOnClickListener(new OnClickListener() {
	        public void onClick(View v) {
	        	MainActivity.this.finish();
	        }
        });
        
        // Uruchomienie serwisu automatycznej aktalizcaji danych.
        startService(new Intent(this, UpdateService.class));
    }

    /**
     * Funkcja budowania menu.
     */
    public boolean onCreateOptionsMenu(Menu menu) {
    	MenuItem tmp = null;
    	
    	// Opcja "Wyszukaj"
    	tmp = menu.add(0, MENU_FIND, 0, getString(R.string.menu_find));
    	tmp.setIcon(R.drawable.menu_find);
    	
    	// Opcja "Lista"
        tmp = menu.add(1, MENU_LIST, 0, getString(R.string.menu_list));
        tmp.setIcon(R.drawable.menu_list);
        
        // Opcja "Konfiguracja"
        tmp = menu.add(2, MENU_CONFIG, 0, getString(R.string.menu_config));
        tmp.setIcon(R.drawable.menu_config);
        
        // Opcja "Aktualizacja"
        tmp = menu.add(3, MENU_UPDATE, 0, getString(R.string.menu_update));
        tmp.setIcon(R.drawable.menu_update);

        // Opcja "O programie"
        tmp = menu.add(4, MENU_ABOUT, 0, getString(R.string.menu_about));
        tmp.setIcon(R.drawable.menu_info);
        
        // Opcja "Wyjdz"
        tmp = menu.add(5, MENU_QUIT, 0, getString(R.string.menu_exit));
        tmp.setIcon(R.drawable.menu_close);
        
        return true;
    }

    /**
     * Obsluga zdarzenia wybrania opcji z menu.
     */
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        	case MENU_FIND: {
        		find();
        		return true;
        	}
        	case MENU_LIST: {
        		list();
        		return true;
        	}
        	case MENU_CONFIG: {
        		config();
        		return true;
        	}
        	case MENU_UPDATE: {
        		update();
        		return true;
        	}
        	case MENU_ABOUT: {
        		showDialog(DIALOG_ABOUT);
        		return true;
        	}
        	case MENU_QUIT: {
        		finish();
        		return true;
        	}
        }
	    
        return false;
    }

	/**
     * Tworzy okno dialogu.
     */
    protected Dialog onCreateDialog(int id) {
        Dialog dialog;
        switch(id) {
	        case DIALOG_ABOUT: {
	        	dialog = NotificationSupportManager.buildInfoDialog(this, getString(R.string.notification_about));
	        	break;
		    }
	        default: {
	            dialog = null;
	        }
        }
        
        return dialog;
    }

	/**
	 * Funcja wywolujaca okno konfiguracji.
	 */
	private void config() {
		startActivity(new Intent(this, ConfigActivity.class));
	}

	/**
	 * Funkcja wywolujaca okno wyszukiwania.
	 */
	private void find() {
		startActivity(new Intent(this, FindActivity.class));
	}

	/**
	 * Funkcja wywolujaca okno listy.
	 */
	private void list() {
		startActivity(new Intent(this, ListActivity.class));
	}
	
	/**
	 * Funkcja wywolujaca aktualizacje bazy danych
	 */
    private void update() {
    	Intent intent = new Intent(this, UpdateService.class);
    	intent.putExtra("forceUpload", true);
        startService(intent);		
	}

}